// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:html';

import 'package:expect/minitest.dart';

import 'utils.dart';

serializationTest(name, value) {
  test(name, () {
    // To check how value is serialized and deserialized, we create a
    // MessageEvent.
    final event =
        new MessageEvent('', data: value, origin: '', lastEventId: '');
    verifyGraph(value, event.data);
  });
}

main() {
  serializationTest('null', null);
  serializationTest('int', 1);
  serializationTest('double', 2.39);
  serializationTest('string', 'hey!');

  final simpleMap = {'a': 100, 'b': 's'};
  final dagMap = {'x': simpleMap, 'y': simpleMap};
  final cyclicMap = {'b': dagMap};
  cyclicMap['a'] = cyclicMap;
  serializationTest('simple map', simpleMap);
  serializationTest('dag map', dagMap);
  serializationTest('cyclic map', cyclicMap);

  final simpleList = [100, 's'];
  final dagList = [simpleList, simpleList];
  final cyclicList = [dagList];
  cyclicList.add(cyclicList);
  serializationTest('simple list', simpleList);
  serializationTest('dag list', dagList);
  serializationTest('cyclic list', cyclicList);

  serializationTest('datetime', [new DateTime.now()]);

  var blob = new Blob(
      ['Indescribable... Indestructible! Nothing can stop it!'], 'text/plain');
  serializationTest('blob', [blob]);

  var canvas = new CanvasElement();
  canvas.width = 100;
  canvas.height = 100;
  var imageData = canvas.context2D.getImageData(0, 0, 1, 1);
  serializationTest('imagedata', [imageData]);
}
